importPackage(Packages.de.elo.ix.client);
//@include lib_Class.js
//@include lib_sol.common.SordUtils.js
//@include lib_sol.common.TranslateTerms.js
//@include lib_sol.common.ObjectFormatter.js
//@include lib_sol.common.ix.ServiceBase.js
var logger = sol.create("sol.Logger", { scope: "sol.common.ix.services.GetBusinessSolutionConfigs" });
/**
* Retrieves all ELO Business Solution Configurations for a given parent.
*
* This service performs a search based on a parent id and filters elements that are
* based on the mask "ELO Business Solution Configuration".
*
* Limited to a maximum of 100 results.
*
* Please note that BS_CONFIG_NAME and the SORD description is localized if a localization key is given.
*
* # As IX service call
*
* sol.common.IxUtils.execute('RF_sol_common_service_GetBusinessSolutionConfigs', {
* objId: '123'
* });
*
* Returns content as followed:
*
* {
* configs: [{
* // sol.common.ObjectFormatter.TemplateSord definition
* guid: '(...)',
* name: 'sol.common.config.as',
* objKeys: {
* BS_CONFIG_NAME: 'AS Configuration',
* BS_CONFIG_VERSION: '1.00.000'
* }]
* }
*
* @author NM, ELO Digital Office GmbH
* @version 1.0
*
* @eloix
* @requires sol.common.SordUtils
* @requires sol.common.JsonUtils
* @requires sol.common.ix.RfUtils
* @requires sol.common.ix.ServiceBase
*/
sol.define("sol.common.ix.services.GetBusinessSolutionConfigs", {
extend: "sol.common.ix.ServiceBase",
requiredConfig: ["objId"],
/**
* Mask that is used for identifying configuration files.
*/
configMask: "ELO Business Solution Configuration",
/**
* list of objects that are translated using IX translation keys.
*/
translateObjectProperties: {
desc: true,
objKeys: {
BS_CONFIG_NAME: true
}
},
initialize: function (config) {
var me = this;
me.$super("sol.common.ix.ServiceBase", "initialize", [config]);
},
/**
* Reads a list of all configuration objects
* @return {Object}
*/
process: function () {
var me = this,
findInfo, findByIndex, findChildren, findResult,
configs = [];
findInfo = new FindInfo();
findByIndex = new FindByIndex();
findChildren = new FindChildren();
findInfo.findByIndex = findByIndex;
findInfo.findChildren = findChildren;
findByIndex.maskId = me.configMask;
findChildren.endLevel = -1;
findChildren.parentId = me.objId;
findResult = ixConnect.ix().findFirstSords(findInfo, 100, SordC.mbAll);
if (findResult.sords && findResult.sords.length > 0) {
configs = sol.common.ObjectFormatter.format({
sord: {
formatter: "sol.common.ObjectFormatter.TemplateSord",
data: findResult.sords
}
}).sord;
}
return {
configs: me.translate(configs)
};
},
/**
* Localization of configuration objects.
* Translated keys as defined by translateObjectProperties.
* @private
* @param {Object} configs
* @return {Object} configs
*/
translate: function (configs) {
var me = this,
terms = [],
i;
// read definitions
for (i = 0; i < configs.length; i++) {
try {
me.parseDefinition(me.translateObjectProperties, configs[i], function (key, val) {
terms.push(val);
return null;
});
} catch(ex) {
me.logger.error("failed loading definition: " + configs[i].name, ex);
}
}
// translate definitions
sol.common.TranslateTerms.require(terms);
for (i = 0; i < configs.length; i++) {
me.parseDefinition(me.translateObjectProperties, configs[i], function (key, val) {
return sol.common.TranslateTerms.translate(val);
});
}
return configs;
},
/**
* Helper for handling object structures.
* @private
* @param {Object} base
* @param {Object} obj
* @param {Object} fct
*/
parseDefinition: function (base, obj, fct) {
var me = this,
objName, res;
for (objName in base) {
if (base && base.hasOwnProperty(objName)
&& obj && obj.hasOwnProperty(objName)) {
if (base[objName] === true) {
res = fct.call(me, objName, obj[objName], obj);
if (res !== null && res !== "") {
obj[objName] = res;
}
} else {
me.parseDefinition(base[objName], obj[objName], fct);
}
}
}
}
});
/**
* @member sol.common.ix.services.GetBusinessSolutionConfigs
* @method RF_sol_common_service_GetBusinessSolutionConfigs
* @static
* @inheritdoc sol.common.ix.ServiceBase#RF_ServiceBaseName
*/
function RF_sol_common_service_GetBusinessSolutionConfigs(iXSEContext, args) {
logger.enter("RF_sol_common_service_GetBusinessSolutionConfigs", args);
var params, service, result;
params = sol.common.ix.RfUtils.parseAndCheckParams(iXSEContext, arguments.callee.name, args, "objId");
service = sol.create("sol.common.ix.services.GetBusinessSolutionConfigs", params);
result = service.process();
logger.exit("RF_sol_common_service_GetBusinessSolutionConfigs", result);
return sol.common.JsonUtils.stringifyAll(result);
}